package MassageController.Massage;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import Connect.connector;

public class MassageDAO{
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	public MassageBean[] List(String id, String page){
		conn = connector.getConnection();
		/**
		 * 쪽지 전부를 불러오는 메소드
		 * -매개변수 : id(접속자의 ID), page(현재 쪽지의 페이지 번호)
		 * -return : 쪽지의 내용을 전부 저장한 배열 함수인 result 이 반환
		 * 			 페이지 번호를 이용하여 5개씩만 쪽지 내용 저장
		 */
	
		ArrayList<MassageBean> result = new ArrayList<MassageBean>();
		int pagenum = Integer.parseInt(page);
		int startNum;
		
		if(pagenum == 1){
			startNum = 0;
		}else{
			startNum = (pagenum-1)*10;
		}
		int endNum = 10;
		
		System.out.println("시작 페이지 = "+startNum);
		System.out.println("가져올 수 = " +endNum);
		
		try{
			
			String sql = "select * from (select * from MASSAGE where Msg_To = ? ORDER BY `ID` DESC) a where a.ID limit ?, ?";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setString(1, id);
			pstmt.setInt(2, startNum);
			pstmt.setInt(3, endNum);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()){
				MassageBean msBin = new MassageBean();
				msBin.setMagId(rs.getInt("ID"));
				msBin.setMsgTo(rs.getString("Msg_to"));
				msBin.setMsgForm(rs.getString("Msg_Form"));
				msBin.setMsgContents(rs.getString("Msg_Contents"));
				msBin.setMsgDate(rs.getDate("Msg_Date"));
				msBin.setMsgCheck(rs.getInt("Msg_Check"));
				result.add(msBin);
			}
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
		return result.toArray(new MassageBean[0]);
	}
	public void Listdelete (int chValue){
		conn = connector.getConnection();
		/**
		 * 쪽지를 지우기 위한 메소드
		 * -매개변수 : chValue(쪽지의 고유 값)
		 * -return : 없음
		 */
		
		try{
			
			String sql = "delete from MASSAGE where ID = ?";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setInt(1, chValue);
			
			pstmt.executeUpdate();
			
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
	}
	public int ListCount(String id){
		conn = connector.getConnection();
		/**
		 * 쪽지의 총 개수를 알기 위한 메서드
		 * -매개변수 : id(접속자의 ID)
		 * -return : 쪽지의 총 개수를 int 타잎으로 반환
		 */
		
		try{
			
			String sql = "select count(*) from MASSAGE where Msg_To = ?";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setString(1, id);
			
			rs = pstmt.executeQuery();
			
			if( rs.next()){
				
				int count = rs.getInt("count(*)");
				return count;
			}
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
		return -1;
	}
	
	public MassageBean ScriptSee(String chValue){
		conn = connector.getConnection();
		/**
		 * 쪽지의 내용을 자세히 보기 위한 메서드
		 * -매개변수 : chValue(쪽지의 고유 값)
		 * -return : 해당 쪽지의 자세한 내용을 Bean 형식으로 반환
		 */
		
		MassageBean msBean = new MassageBean();
		int idnum = Integer.parseInt(chValue);
		
		try{
			
			String sql = "select * from MASSAGE where ID = ?";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setInt(1, idnum);			
			
			rs = pstmt.executeQuery();
			
			while(rs.next()){
				msBean.setMagId(rs.getInt("ID"));
				msBean.setMsgTo(rs.getString("Msg_to"));
				msBean.setMsgForm(rs.getString("Msg_Form"));
				msBean.setMsgContents(rs.getString("Msg_Contents"));
				msBean.setMsgDate(rs.getDate("Msg_Date"));
				msBean.setMsgCheck(rs.getInt("Msg_Check"));
				
			}
		
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
		return msBean;
	}
	
	public boolean MsCheck(String chValue){
		conn = connector.getConnection();
		/**
		 * 쪽지의 내용을 확인 하였는지 유/무를 체크 하는 메서드
		 * -매개변수 : chValue(쪽지의 고유 값)
		 * -return : true, false
		 */
		
		int idnum = Integer.parseInt(chValue);
		
		try{
			
			String sql = "UPDATE MASSAGE SET Msg_Check = '1' WHERE ID = ?";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setInt(1, idnum);			
			
			pstmt.executeUpdate();	
			
		}catch(Exception e){
			 e.printStackTrace();
			 return false;
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
		return true;
	}
	
	public boolean MsReadCheck(String nick){
		conn = connector.getConnection();
		/**
		 * 쪽지의 내용중 읽지 않은 쪽지가 있지 검사하는 메서드
		 * -매개변수 : chValue(쪽지의 고유 값)
		 * -return : true, false
		 */
		
		try{
			
			String sql = "select * from MASSAGE where Msg_To = ? && Msg_Check=0";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setString(1, nick);			
			
			rs = pstmt.executeQuery();	
			
			while(rs.next()){
				return true;
			}
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
		return false;
	}
	
	public void Write(MassageBean massagebean){
		conn = connector.getConnection();
		/**
		 * 입력한 쪽지 내용을 DB에 저장하기 위한 메서드 
		 * -매개변수 : massagebean(쪽지의 내용이 저장되어 있는 bean)
		 * -return : 없음
		 */
		
		try{
			
			String sql = "INSERT INTO MASSAGE (`ID`, `Msg_To`, `Msg_Form`, `Msg_Date`, `Msg_Contents`, `Msg_Check`) VALUES (NULL, ?, ?, Sysdate(), ?, '0')";
			
			pstmt = conn.prepareStatement( sql );
			
			pstmt.setString(1, massagebean.getMsgTo());	
			pstmt.setString(2, massagebean.getMsgForm());
			pstmt.setString(3, massagebean.getMsgContents());
			
			pstmt.executeUpdate();	
			
			
		}catch(Exception e){
			 e.printStackTrace();
		}finally{
			connector.releaseConnection(conn, pstmt, rs);
		}
	}
}
